import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * @author yu
 * @date 2025年04月29日 14:50
 */
public class _03_Hashtable_04_1_twoSum {
    /*使用哈希表*/
    public static int[] twoSum(int[] nums, int target) {
        int[] res = new int[2];
        if (nums == null || nums.length == 0) {
            return res;
        }
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            int temp = target - nums[i];
            // 检查哈希表中是否存在与当前元素相加等于目标值的元素
            if (map.containsKey(temp)) {
                // 若存在，记录两个元素的下标
                res[1] = i;
                res[0] = map.get(temp);//得到temp的value
                return res;
            }
            // 将当前元素及其下标存入哈希表
            map.put(nums[i], i);
        }
        // 若未找到符合条件的元素对，返回一个特殊标识，这里用 [-1, -1]
        return new int[]{-1, -1};
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入数组 nums 的元素，以空格分隔：");
        String input = scanner.nextLine();
        String[] parts = input.split(" ");
        int[] nums = new int[parts.length];
        for (int i = 0; i < parts.length; i++) {
            nums[i] = Integer.parseInt(parts[i]);
        }

        System.out.print("请输入目标值 target：");
        int target = scanner.nextInt();

        int[] result = twoSum(nums, target);

        System.out.print("两数之和为目标值的两个数的下标为：");
        for (int num : result) {
            System.out.print(num + " ");
        }

        scanner.close();
    }


}
